필요한 연산이 ADT 선택을 가른다
요구사항을 고르면 필요한 연산과 그 연산을 직접 제공하는 ADT의 행이 강조된다.
| 필요한 연산 | 리스트 | USet | SSet | 스택 | 큐 | 우선순위 큐 |
|---|---|---|---|---|---|---|
| 위치 i 조회·삽입 | get(i), add(i,x) | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 |
| 같은 값 또는 없음 | 해당 없음 | find(x) | 다른 의미의 find | 해당 없음 | 해당 없음 | 해당 없음 |
| x 이상인 가장 작은 값 또는 없음 | 해당 없음 | 다른 의미의 find | find(x) | 해당 없음 | 해당 없음 | 해당 없음 |
| 마지막 원소 삭제·반환 | 위치 연산 필요 | 해당 없음 | 해당 없음 | pop() | 삭제 순서가 다름 | 삭제 기준이 다름 |
| 첫 원소 삭제·반환 | 위치 연산 필요 | 해당 없음 | 해당 없음 | 삭제 순서가 다름 | dequeue() | 삭제 기준이 다름 |
| 우선순위가 가장 높은 원소 삭제·반환 | 해당 없음 | 해당 없음 | 해당 없음 | 삭제 기준이 다름 | 삭제 기준이 다름 | remove() |
같은 저장 값도 질문에 따라 호출이 달라진다
각 카드는 해당 ADT가 돌려주는 결과를 보여 준다. 같은 값을 저장해도 자료형에 따라 답할 수 있는 질문이 다르다.
get(1) → 7위치 1의 값find(6) → None6과 같은 값이 없음find(6) → 76 이상인 가장 작은 값pop() → 10가장 최근 원소dequeue() → 3가장 먼저 들어온 원소remove() → 3숫자가 작을수록 우선할 때 가장 높은 우선순위저장된 값보다 필요한 반환값, 위치 조건, 순서 조건이 ADT 선택을 결정한다. Python의 list도 pop()을 부르면 스택처럼, deque의 popleft()를 부르면 큐처럼 쓰인다. 자료형 이름만으로 ADT를 단정할 수 없다.